import axios from "axios";

const request = axios.create({
    timeout: 50000,
    // 使用绝对路径，避免在非根路由下相对路径解析错误导致请求未发出或 404
    baseURL: '/api'
})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
    const token = localStorage.getItem("token")
    config.headers.Authorization=token
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    // 处理token过期的情况
    if(response.data && response.data.code === 402){
        localStorage.removeItem("token")
        window.location.reload()
        return Promise.reject(new Error('Token expired'))
    }
    
    // 统一返回数据结构，确保前端能正确获取code、message、data等字段
    return response.data;
}, function (error) {
    // 对响应错误做些什么
    console.error('Request error:', error)
    
    // 统一错误响应格式
    if (error.response) {
        // 服务器返回错误状态码
        return Promise.reject({
            code: error.response.status,
            message: error.response.data?.message || `HTTP ${error.response.status} 错误`,
            data: null
        })
    } else if (error.request) {
        // 请求已发出但没有收到响应
        return Promise.reject({
            code: -1,
            message: '网络错误，请检查网络连接',
            data: null
        })
    } else {
        // 其他错误
        return Promise.reject({
            code: -1,
            message: error.message || '未知错误',
            data: null
        })
    }
});

export default request